﻿Type.registerNamespace("MoniMisi2");

MoniMisi2.Menu = function(element) {
    MoniMisi2.Menu.initializeBase(this, [element]);
    this.CampoURL = null;
    this.IdMenu = null;
    this.DatosMenu = null;
    this.CampoStatus = null;
    this.Raiz = null;
    this.CampoEtiqueta = null;
    this.CampoPadre = null;
    this.CampoId = null;
    this.DelLoad = Function.createDelegate(this, this.OnLoadAplicacion);
    this.DelEncontrado = Function.createDelegate(this, this.Encontrado);
    this.DelSeleccionando = Function.createDelegate(this, this.Seleccionando);
    this.SeleccionandoArgs = function(pRegistro, pCancelar) { this.Registro = pRegistro, this.Cancelar = pCancelar };
    this.Contenedor = null;
    this.HTMLEtiqueta = null;
    this.Target = null;
};

MoniMisi2.Menu.prototype = {

    initialize: function() {
        MoniMisi2.Menu.callBaseMethod(this, 'initialize');
        this.Contenedor = this.get_element();
        Sys.Application.add_load(this.DelLoad)
    },
    dispose: function() {
        MoniMisi2.Menu.callBaseMethod(this, 'dispose');
    },

    OnLoadAplicacion: function() {
        if (document.getElementById(this.IdMenu) != null) {
            this.DatosMenu = document.getElementById(this.IdMenu).control;
            this.DatosMenu.add_Encontrado(this.DelEncontrado)
            this.DatosMenu.Arribar();
        };
    },
    Encontrado: function(sender, e) {
        if (typeof this.DatosMenu.Registro[this.CampoId] == "undefined") { throw new Error("El valor de la propiedad CampoId del menu no aparece en el Porveedor de datos" + this.IdMenu) };
        if (typeof this.DatosMenu.Registro[this.CampoPadre] == "undefined") { throw new Error("El  valor de la propiedad CampoPadre del menu no aparece el ep Porveedor de datos" + this.IdMenu) }
        if (typeof this.DatosMenu.Registro[this.CampoEtiqueta] == "undefined") { throw new Error("El  valor de la propiedad CampoEtiqueta del menu no aparece el ep Porveedor de datos" + this.IdMenu) }

        this.DatosMenu.remove_Encontrado(this.DelEncontrado);
        var PrimerUL = document.createElement("UL")
        PrimerUL.className = "Menu"
        this.Contenedor.appendChild(PrimerUL);
        var Id = this.DatosMenu.Registro[this.CampoId]
        this.DatosMenu.Buscar({ Valor: Id });
        this.Crear(this.Contenedor.children[0], Id);
    },
    Crear: function(pContenedor, pId) {
        while (!this.DatosMenu.FinDeArchivo && this.DatosMenu.Registro[this.CampoPadre] == pId) {
            var NuevoItem = document.createElement("li")
            NuevoItem.Registro = this.DatosMenu.Registro
            var NuevoA = document.createElement("a")
            NuevoA.Registro = this.DatosMenu.Registro
            $addHandler(NuevoA, "click", this.DelSeleccionando);
            var NuevoB = document.createElement(this.HTMLEtiqueta)
            NuevoB.Registro = this.DatosMenu.Registro
            NuevoA.appendChild(NuevoB)
            NuevoItem.appendChild(NuevoA)
            pContenedor.appendChild(NuevoItem)
            var PosActual = this.DatosMenu.Puntero
            NuevoA.href = this.DatosMenu.Registro[this.CampoURL];
            NuevoA.target = this.Target;
            NuevoB.innerHTML = this.DatosMenu.Registro[this.CampoEtiqueta]
            if (this.DatosMenu.Registro[this.CampoStatus] != undefined) {
                NuevoB.title = this.DatosMenu.Registro[this.CampoStatus];
            }
            var Id = this.DatosMenu.Registro[this.CampoId]
            this.DatosMenu.Buscar({ Valor: Id });
            if (this.DatosMenu.Registro[this.CampoPadre] == Id) {
                var NuevoContenedor = document.createElement("UL");
                NuevoA.className = "Submenu";
                NuevoItem.appendChild(NuevoContenedor, Id);
                this.Crear(NuevoContenedor, Id);
            }
            this.DatosMenu.IrA(PosActual);
            this.DatosMenu.Avanzar();
        }
    },

    Seleccionando: function(e) {
        var se = new this.SeleccionandoArgs(e.target.Registro, false);
        var h = this.get_events().getHandler('Seleccionando');
        if (h) {
            h(this, se)
            if (se.Cancelar) {
                e.preventDefault();
                return false
            }
        }
    },

    Refrescar: function(pFiltro) {
        while (this.Contenedor.firstChild) {
            this.Contenedor.removeChild(this.Contenedor.firstChild)
        }
        this.DatosMenu.remove_Encontrado(this.DelEncontrado);
        this.DatosMenu.Limpiar()
        this.DatosMenu.Filtro = pFiltro
        this.OnLoadAplicacion();
    },

    get_Raiz: function() {
        return this.Raiz;
    },

    set_Raiz: function(value) {
        if (this.Raiz !== value) {
            this.Raiz = value;
            this.raisePropertyChanged('Raiz');
        }
    },

    get_CampoEtiqueta: function() {
        return this.CampoEtiqueta;
    },

    set_CampoEtiqueta: function(value) {
        if (this.CampoEtiqueta !== value) {
            this.CampoEtiqueta = value;
            this.raisePropertyChanged('CampoEtiqueta');
        }
    },

    get_HTMLEtiqueta: function() {
        return this.HTMLEtiqueta;
    },

    set_HTMLEtiqueta: function(value) {
        if (this.HTMLEtiqueta !== value) {
            this.HTMLEtiqueta = value;
            this.raisePropertyChanged('HTMLEtiqueta');
        }
    },
    get_Target: function() {
        return this.Target;
    },

    set_Target: function(value) {
        if (this.Target !== value) {
            this.Target = value;
            this.raisePropertyChanged('Target');
        }
    },

    get_CampoStatus: function() {
        return this.CampoStatus;
    },

    set_CampoStatus: function(value) {
        if (this.CampoStatus !== value) {
            this.CampoStatus = value;
            this.raisePropertyChanged('CampoStatus');
        }
    },

    get_CampoPadre: function() {
        return this.CampoPadre;
    },

    set_CampoPadre: function(value) {
        if (this.CampoPadre !== value) {
            this.CampoPadre = value;
            this.raisePropertyChanged('CampoPadre');
        }
    },

    get_CampoId: function() {
        return this.CampoId;
    },

    set_CampoId: function(value) {
        if (this.CampoId !== value) {
            this.CampoId = value;
            this.raisePropertyChanged('CampoId');
        }
    },


    get_CampoURL: function() {
        return this.URL;
    },

    set_CampoURL: function(value) {
        if (this.CampoURL !== value) {
            this.CampoURL = value;
            this.raisePropertyChanged('CampoURL');
        }
    },

    get_IdMenu: function() {
        return this.IdMenu;
    },

    set_IdMenu: function(value) {
        if (this.IdMenu !== value) {
            this.IdMenu = value;
            this.raisePropertyChanged('IdMenu');
        }
    },

    add_Seleccionando: function(handler) {
        this.get_events().addHandler('Seleccionando', handler);
    },
    remove_Seleccionando: function(handler) {
        this.get_events().removeHandler('Seleccionando', handler);
    }
}

MoniMisi2.Menu.registerClass('MoniMisi2.Menu', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();